A symbol reader is a device used to extract information optically encoded in a machine-readable symbol and convert it into computer-compatible digital data. Typical machine-readable symbols include bar code symbols having varying width dark bars and light spaces. The decoded data can be transmitted directly to an attached computer, stored locally for later dumping, or used locally with an application program resident in the symbol reader. The symbol reader can be considered as two separate elements: the input device, and the decoder. These two elements can reside in separate physical packages connected by a cable or other communications link, or they can be combined in a single unit.
The input device is a unit that employs electro-optical techniques to scan the symbol. The actual scanning motion may be provided by the operator's hand motion, by an internal scanning system, or by movement of the symbol past the input device. The input device produces an instantaneous electrical output that is representative of the localized reflectivity of the symbol at the point that is being scanned. The input device is usually an active system, wherein it illuminates the symbol with light energy, then examines the amount of light reflected by a localized area of the symbol. The symbol light areas will reflect more light than the dark areas. The light reflected from the symbol is directed to an optical receiver such as a photodiode detector or charge-coupled detector (CCD), which generates a small current proportional to the amount of light returned. An amplifier in the input device increases the signal from the optical receiver to a useable level. In order to differentiate between the light and dark areas, the analog voltage is often converted into a digital wave form by a circuit known as the wave shaper. The output voltage of an input device can be either analog or digital. If the output is analog, the wave shaper function may be incorporated in the input device or in the decoder unit.
The decoder part of the symbol reader analyzes the signal produced by the input device and deciphers the information encoded in the symbol. The resulting data is either transmitted to an attached computer, stored locally for later transfer, or forwarded to an application program resident in the decoder itself. In the typical symbol reader, this function is usually implemented in software running on a microprocessor, but it might also be realized by traditional hardwired logic. Whichever implementation is used, the following steps are included: (1) Determine whether the input device's optical beam is currently on a dark area or light area of a symbol; (2) Measure the width of each bar and space element as the input device's optical beam is scanned through the symbol; (3) Identify the symbol's element widths; (4) Decode the symbol's encoded data characters by comparing the identified element widths to a table of valid values for each character in the character set; (5) If necessary, reverse the order of the decoded data characters to accommodate symbols that have been scanned right to left; and (6) Perform additional checks to confirm the validity of the scan.
There are currently a large variety of symbologies in use, including bar code symbologies. Bar code symbologies fall into two general categories: discrete and continuous. In a discrete code, each character can stand alone and be decoded independently from the adjacent characters. Each character is separated from its neighbor by loosely toleranced intercharacter gaps, which contain no information. Every character has a bar on each end. A continuous code symbology has no intercharacter gaps. Every character begins with a bar and ends with a space. The end of one character is indicated by the start of the next character. Examples of bar code symbols include the universal product code (UPC), European Article Numbering System (EAN), interleaved two of five, Codabar, Code 39, Code 128, Code 93, Code 49, and Code 16k. A variety of two-dimensional codes or area codes also exist. Popular area codes include: CodeOne, DataMatrix, Codablock, USD-5, Vericode, Datacode, UPScode, and PDF417.
Most reading equipment includes the capability to decode several different symbologies. The user configures their reader to the desired choice by setting switches, scanning control labels, or receiving commands from the host computer. Readers are also available that can automatically recognize which symbology has been scanned, then use the appropriate decoding algorithm. The data is decoded independently of the symbology used. Called autodiscrimination, this feature is extremely useful when several different symbologies are encountered in a given application. The operator configures the reader with a list of symbologies that will be allowed by setting switches or scanning control labels. For each symbol scanned, the symbol reader must search through a large number of tables corresponding to each of the allowed symbologies in an attempt to find a match. In an effort to speed up the search, many symbol readers attempt to decode using the table for the most recently decoded symbology first.
Limiting the list of symbologies is advisable for a couple of reasons. It minimizes the probability that an inadvertent scan of a random symbol will result in incorrect data being gathered. This, in turn, affects data security. Although the theoretical probability of a symbology recognition error is very low, there is a finite probability of a partial scan of one symbology's being recognized as a valid scan in another symbology. For many symbology combinations, this appears to be a small problem, but localized printing errors or extraneous markings on the substrate can combine with partial scans to create an operational concern. Limiting the list will also speed up the decoding process in most readers.